package com.edoomath.api.dao;

import java.util.List;

import com.demo2do.core.persistence.annotation.Dao;
import com.demo2do.core.persistence.annotation.Query;
import com.demo2do.core.persistence.annotation.Variable;
import com.edoomath.entity.course.Course;
import com.edoomath.entity.course.CourseItem;
import com.edoomath.entity.course.CourseItemStat;
import com.edoomath.entity.course.CourseText;
import com.edoomath.entity.usercourse.UserCourse;
import com.edoomath.entity.usercourse.UserCourseTask;

/**
 * 
 * @author mohanlan
 *
 */
@Dao(value = "hibernate")
public interface CourseItemDao {
    
    /**
     * 
     * @param id
     * @return
     */
    @Query("FROM CourseItem WHERE id = :id AND disabled = false")
    public CourseItem loadCourseItem(@Variable("id") Long id);
    
    /**
     * 
     * @param courseItem
     * @return
     */
    @Query("FROM CourseItemStat WHERE courseItem = :courseItem")
    public CourseItemStat loadCourseItemStat(@Variable("courseItem") CourseItem courseItem);
    
    /**
     * 
     * @param courseItems
     * @return
     */
    @Query("FROM CourseItemStat WHERE courseItem in (:courseItems)")
    public List<CourseItemStat> listCourseItemStat(@Variable("courseItems") List<CourseItem> courseItems);
    
    /**
     * 
     * @param course
     * @return
     */
    @Query("FROM CourseItem WHERE course = :course AND disabled = false ORDER BY sorting ASC")
    public List<CourseItem> list(@Variable("course") Course course);
    
    /**
     * 
     * @param userCourseTask
     * @param courseItem
     * @return
     */
    @Query("FROM UserCourseTask WHERE courseItem = :courseItem AND userCourse = :userCourse AND disabled = false")
    public List<UserCourseTask> listUserCourseTask(@Variable("userCourse") UserCourse userCourse, @Variable("courseItem") CourseItem courseItem);
    
    /**
     * 
     * @param courseItem
     * @param type
     * @return
     */
    @Query("FROM CourseText WHERE courseItem = :courseItem AND type = :type")
    public List<CourseText> listTexts(@Variable("courseItem") CourseItem courseItem, @Variable("type") String type);
}
